home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2000 #5
/
Amiga Plus CD - 2000 - No. 5.iso
/
Tools
/
Dev
/
lame_src
/
brhist.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-01-01
|
4KB
|
177 lines
#include <string.h>
#include "brhist.h"
#include "util.h"
#if (defined(BRHIST) && !defined(NOTERMCAP))
#include <termcap.h>
#endif
#define BRHIST_BARMAX 50
long brhist_count[15];
int brhist_vbrmin;
int brhist_vbrmax;
long brhist_max;
char brhist_bps[15][5];
char brhist_backcur[200];
char brhist_bar[BRHIST_BARMAX+10];
char brhist_spc[BRHIST_BARMAX+1];
char stderr_buff[BUFSIZ];
#ifdef _WIN32
COORD Pos;
HANDLE CH;
CONSOLE_SCREEN_BUFFER_INFO CSBI;
#endif
#ifdef NOTERMCAP
/* tgetstr */
char *
tgetstr(char id[2], char **area)
{
char *result;
result = NULL;
if (strncmp(id, "up", 2) == 0) {
result = "\033[A";
}
*area = result;
return result;
}
#endif /* NOTERMCAP */
void brhist_init(lame_global_flags *gfp,int br_min, int br_max)
{
int i;
char term_buff[1024];
char *termname;
char *tp;
char tc[10];
for(i = 0; i < 15; i++)
{
sprintf(brhist_bps[i], "%3d", bitrate_table[gfp->version][i]);
brhist_count[i] = 0;
}
brhist_vbrmin = br_min;
brhist_vbrmax = br_max;
brhist_max = 0;
#ifdef BRHIST
memset(&brhist_bar[0], '*', BRHIST_BARMAX);
brhist_bar[BRHIST_BARMAX] = '\0';
memset(&brhist_spc[0], ' ', BRHIST_BARMAX);
brhist_spc[BRHIST_BARMAX] = '\0';
brhist_backcur[0] = '\0';
#ifndef NOTERMCAP
if ((termname = getenv("TERM")) == NULL)
{
ERRORF("can't get TERM environment string.\n");
gfp->brhist_disp = 0;
return;
}
if (tgetent(term_buff, termname) != 1)
{
ERRORF("can't find termcap entry: %s\n", termname);
gfp->brhist_disp = 0;
return;
}
#endif /* !NOTERMCAP */
tc[0] = '\0';
tp = &tc[0];
tp=tgetstr("up", &tp);
brhist_backcur[0] = '\0';
#ifdef _WIN32
CH= GetStdHandle(STD_ERROR_HANDLE);
#else
for(i = br_min-1; i <= br_max; i++)
strcat(brhist_backcur, tp);
setbuf(stderr, stderr_buff);
#endif
#endif
}
void brhist_add_count(int i)
{
++brhist_count[i];
if (brhist_count[i] > brhist_max)
brhist_max = brhist_count[i];
}
void brhist_disp(long totalframes)
{
int i;
long full;
int barlen;
char brpercent[10];
#ifdef BRHIST
full = (brhist_max < BRHIST_BARMAX) ? BRHIST_BARMAX : brhist_max;
fputc('\n', stderr);
for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
{
barlen = (brhist_count[i]*BRHIST_BARMAX+full-1) / full;
fputs(brhist_bps[i], stderr);
sprintf(brpercent,"[%3i%%]",(int)(100*brhist_count[i]/totalframes));
fputs(brpercent, stderr);
fputs(&brhist_bar[BRHIST_BARMAX - barlen], stderr);
fputs(&brhist_spc[barlen], stderr);
fputc('\n', stderr);
}
#ifdef _WIN32
//fflush is not needed
if(GetFileType(CH)!= FILE_TYPE_PIPE)
{
GetConsoleScreenBufferInfo(CH, &CSBI);
Pos.Y= CSBI.dwCursorPosition.Y-(brhist_vbrmax- brhist_vbrmin)- 2;
Pos.X= 0;
SetConsoleCursorPosition(CH, Pos);
}
#else
fputs(brhist_backcur, stderr);
fflush(stderr);
#endif
#endif
}
void brhist_disp_total(lame_global_flags *gfp)
{
int i;
FLOAT ave;
/* lame_internal_flags *gfc=gfp->internal_flags;*/
#ifdef BRHIST
for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
fputc('\n', stderr);
#else
fprintf(stderr, "\n----- bitrate statistics -----\n");
fprintf(stderr, " [kbps] frames\n");
for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
{
fprintf(stderr, " %3d %8ld (%.1f%%)\n",
bitrate_table[gfp->version][i],
brhist_count[i],
(FLOAT)brhist_count[i] / gfp->totalframes * 100.0);
}
#endif
ave=0;
for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
ave += bitrate_table[gfp->version][i]*
(FLOAT)brhist_count[i] / gfp->totalframes;
fprintf(stderr, "\naverage: %2.0f kbs\n",ave);
fflush(stderr);
}